gusucode.com > 《MATLAB图像与视频处理实用案例详解》代码 > 《MATLAB图像与视频处理实用案例详解》代码/第 21 章 路面裂缝检测识别系统设计/Bridge_Crack.m
function bwn = Bridge_Crack(bw) [row, col] = size(bw); [L, num] = bwlabel(bw); bwn = bw; if num < 2 return; end stats = regionprops(L, 'BoundingBox'); for i = 1 : num l(i) = round(stats(i).BoundingBox(1) + 0.5); b(i) = round(stats(i).BoundingBox(2) - 0.5); r(i) = round(stats(i).BoundingBox(1) + stats(i).BoundingBox(3) - 1.5); rb(i) = round(stats(i).BoundingBox(2) + stats(i).BoundingBox(4)); end l(l<=0) = 1; b(b<=0) = 1; r(r>=col) = col; rb(rb>=row) = row; try for i = 1 : num-1 for j = b(i) : rb(i) if bw(j, r(i)) ~= 0 break; end end for k = b(i+1) : rb(i+1) if bw(k, l(i+1)) ~= 0 break; end end Yi = l(i+1); Ya = r(i); Xi= k; Xa = j; d = Yi - Ya; e = Xa - Xi; if e>0 if (d>e) || (d==e); for p = 1 : e bw(j-p, r(i)+p) = 1; bw(j-p-1, r(i)+p) = 1; bw(j-p+1, r(i)+p) = 1; end for q = e+1 : d-1 bw(j-e, r(i)+q) = 1; bw(j-e-1, r(i)+q) = 1; bw(j-e+1, r(i)+q) = 1; end end if d<e for p = 1:d bw(j-p, r(i)+d) = 1; bw(j-p-1, r(i)+d) = 1; bw(j-p+1, r(i)+d) = 1; end for q = d+1 : e-1 bw(j-q, r(i)+d) = 1; bw(j-q, r(i)+d-1) = 1; bw(j-q, r(i)+d+1) = 1; end end if d == 0; for p = 1 : e bw(j-p, r(i)) = 1; bw(j-p, r(i)-1) = 1; bw(j-p, r(i)+1) = 1; end end end if e < 0 e = abs(e); if (d>e) || (d==e) for p = 1:e; bw(j+p, r(i)+p) = 1; bw(j+p-1, r(i)+p) = 1; bw(j+p+1, r(i)+p) = 1; end for q = e+1 : d-1 bw(j+e, r(i)+q) = 1; bw(j+e-1, r(i)+q) = 1; bw(j+e+1, r(i)+q) = 1; end end if d < e for p = 1 : d bw(j+p, r(i)+p) = 1; bw(j+p-1, r(i)+p) = 1; bw(j+p+1, r(i)+p) = 1; end for q = d+1 : e-1 bw(j+q, r(i)+d) = 1; bw(j+q, r(i)+d-1) = 1; bw(j+q, r(i)+d+1) = 1; end end if d == 0 for p = 1:e bw(j+p, r(i)) = 1; bw(j+p, r(i)-1) = 1; bw(j+p, r(i)+1) = 1; end end end if e == 0 for p = 1 : d bw(j, r(i)+p) = 1; bw(j-1, r(i)+p) = 1; bw(j+1, r(i)+p) = 1; end end if d<0 for p = min(Xa, Xi) : max(Xa, Xi) for q = min(Ya, Yi) : max(Ya, Yi) bw(p, q) = 1; end end end end catch bwn = bw; return; end bwn = bw;